In modern service-oriented networks, and in particular in cloud and SDN environments, there is a need to provide complex service offerings, which are composed of chained service elements, e.g. chained SDN applications. SDN applications may be applications such as firewalls (FW), wide area network (WAN) optimization controllers (WOC), deep packet inspection (DPI), network address translation (NAT), application delivery controllers (ADC) or the like. For example, network traffic can first go through a stateful firewall, in order to ensure security, and can then go through an ADC, in order to distribute the load across multiple servers. In the physical networking world such a service chain is typically configured manually.
In the SDN approach such a service chain is configured and administered all in software, which can adapt as the services, for instance the SDN applications. The state of the art provides to this end so-called naïve chaining of virtual applications in cloud virtualizations and SDN applications in a SDN. Naïve chaining means that a plurality of applications is chained together without, for example, the SDN controller being aware of the SDN applications and/or the type of SDN applications it chains. Naïve chaining is today pursued by many companies, although it has several disadvantages and problems.
For example, the order of the plurality of applications chained in the naïve service chain may have implications on the overall behavior of the service chain. In other words, the order, by which different applications are chained together in the service chain, may severely influence the outcome of the service chain. Moreover, different applications in a naïve service chain may interfere with each other, and thereby reduce the performance or even prohibit certain processes. For example, encryption (crypto) prohibits DPI. Or NAT before a firewall prevents a stateful inspection. Another problem of naïve service chaining is that many applications duplicate and repeat specific core functions. For example, DPI is repeated by many applications. Due to the repetition, precious computation resources are wasted.